const state={
 cart: JSON.parse(uni.getStorageSync('cart') || '[]')

} 
const mutations={
  addToCart(state,goods){
    const findResult=state.cart.find(item=>item.goods_id===goods.goods_id)
    if(!findResult){
      state.cart.push(goods)
    }else{
      findResult.goods_count++
    }
    // 通过 commit 方法，调用 m_cart 命名空间下的 saveToStorage 方法
      this.commit('cart/saveToStorage')
  },
  // 将购物车中的数据持久化存储到本地
  saveToStorage(state) {
     uni.setStorageSync('cart', JSON.stringify(state.cart))
  },
  //更新购物车中商品的勾选状态
  updateGoodsState(state,goods){
    const findResult=state.cart.find(item=>item.goods_id===goods.goods_id)
    if(findResult){
      findResult.goods_state=goods.goods_state
      //数据持久化
      this.commit('cart/saveToStorage')
    }
  },
  // 更新购物车中商品的数量
  updateGoodsCount(state,goods){
    const findResult=state.cart.find(item=>item.goods_id===goods.goods_id)
    if(findResult){
      findResult.goods_count=goods.goods_count
      //数据持久化
      this.commit('cart/saveToStorage')
    }
  },
  // 根据 Id 从购物车中删除对应的商品信息
  removeGoodsById(state,goods){
    // 调用数组的 filter 方法进行过滤
    state.cart=state.cart.filter(item=>item.goods_id!==goods.goods_id)
    //数据持久化
    this.commit('cart/saveToStorage')
  },
  // 更新所有商品的勾选状态
  updateAllGoodsState(state,newState){
    // 循环更新购物车中每件商品的勾选状态
      state.cart.forEach(x => x.goods_state = newState)
     //数据持久化
     this.commit('cart/saveToStorage')
  },
 //购买后清理买过的产品，留在购物车的都应该是当前没有选中的产品
 clearCart(state){
   const newCart=state.cart.filter(item=>!item.goods_state)
   state.cart=newCart
   this.commit('cart/saveToStorage')
 }
  
}
const actions={}
const getters={
   // 统计购物车中商品的总数量
     total(state) {
        let c = 0
        // 循环统计商品的数量，累加到变量 c 中
        state.cart.forEach(goods => c += goods.goods_count)
        return c
     },
     // 勾选的商品的总数量
     checkedCount(state){
      return state.cart.filter(item=>item.goods_state).reduce((total,item)=>total+=item.goods_count,0)
     },
      // 已勾选的商品的总价
      checkedGoodsAmount(state){
         // 先使用 filter 方法，从购物车中过滤器已勾选的商品
          // 再使用 reduce 方法，将已勾选的商品数量 * 单价之后，进行累加
          // reduce() 的返回值就是已勾选的商品的总价
          // 最后调用 toFixed(2) 方法，保留两位小数
        return state.cart.filter(item=>item.goods_state)
        .reduce((total,item)=>total+=item.goods_count*item.goods_price,0)
        .toFixed(2)
      }
}

export default{
  namespaced:true,
  state,
  mutations,
  actions,
  getters
}